草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 我可以对来自不同基类的相同功能实现不同的实现吗?

假设如下:classA{virtualvoidf()=0;};classB{virtualvoidf()=0;};我能否以某种方式执行以下操作?classC:publicA,publicB{virtualvoidA::f(){printf("f()fromA");}virtualvoidB::f(){printf("f()fromB");}};那么现在我可以做什么了???A*pa=newC();pa->f();//printsf()fromA;B*pb=(B*)pa;pb->f();//printsf()fromB;谢谢!!! 最佳答案

c++ - 基类的模板函数重载

这个问题在这里已经有了答案:PrioritywhenchoosingoverloadedtemplatefunctionsinC++(6个答案)关闭3年前。我如何强制编译器为基类选择模板函数重载?举个例子说明问题#includeclassA{};classB:publicA{};templatevoidf(constT&t){std::coutvoidcall_f(constT&t){f(t);}intmain(){call_f(10);call_f(A());call_f(B());return0;}它产生输出GenericfOverloadforAGenericf为什么编译器不接收

c++ - 继承虚基类的构造函数

虚基类在最派生类中初始化,所以我的猜测是继承基类的构造函数应该也能工作:structbase{base(int){}};structderived:virtualbase{usingbase::base;};derivedd(0);然而,这无法用GCC5.2.0编译,它试图找到base::base(),但在Clang3.6.2上工作正常。这是GCC中的错误吗? 最佳答案 这是gcc错误58751“[C++11]继承构造函数不能与虚拟继承一起正常工作”(又名:63339“使用来自虚拟基的构造函数”被隐式删除”):来自58751的描述:

c++ - 虚拟继承是否强制基类默认可构造?

在下面的代码中,编译器要求基类X是默认可构造的。但是,如果我从classNode的继承中删除virtual关键字,则对成员m_x的访问当然会变得不明确,但不再需要类X的默认构造函数。这是什么原因?#includestructApply{templatestructNode:virtualT//thislinecontainsthevirtualinheritance{templateNode(Args...args):T(args...){}};templatestructInheritance;templatestructInheritance:FirstBaseClass,Inhe

c++ - 在 C++ 中动态更改对象的基类

我有两个继承自类Sensor的类Sensor1和Sensor2。我正在创建基于运行时某些条件的基类应该是Sensor1或Sensor2的类Camera。可能吗?一种方法是在Camera中为Sensor创建一个指针成员,然后分配给Sensor1或Sensor2(基于条件),在这种情况下,对于Sensor的所有方法,我需要在Camera中创建方法(setResolution&changeMode)并调用相应的方法(我想避免)classSensor{public:Sensor(){}~Sensor(){}voidsetResolution(intw,inth){};voidchangeMod

c++ - 具有数据成员的抽象基类

如果我正在创建一个抽象基类,并且从它派生的类将具有一些相同的数据成员,那么让这些成员在抽象基类中私有(private)化并授予对它们的protected访问是否更好??或者不打扰而只是将数据成员放在派生类中。这是在C++中。 最佳答案 在OOP设置中要问的主要问题是:这些数据属于哪里?在继承关系中,数据(和功能)应该在或多或少不变的最高阶段定义。这促进了最大程度的模块化和代码重用。例如,假设有两个类:classHuman;classStudent:publicHuman;添加数据成员“m_Arms”时,我们根据以下问题确定“Huma

c++ - 不同项目中多个类的基类

这更像是一个设计问题。目前我有多个类(在不同的项目中),它们具有不同的角色,但有一种通用方法执行相同的职责。我正在考虑为所有这些类创建一个基类,以便它们中的每一个都可以继承此类并实现此方法以节省重复。我的问题是我应该为多个项目中的所有类设置一个基类,还是应该为每个项目设置一个基类?谢谢, 最佳答案 我会定义一个包含该共享方法的接口(interface)。然后我会将该接口(interface)放在它自己的项目中。然后让您的具体实现引用该项目并实现接口(interface)。像这样的..Repositories.projIReposit

c++ - c++ 是否像奇怪的重复模板模式一样保证将祖母基类向下转换为孙子类?

我想知道c++是否像奇怪的重复模板模式一样保证将祖母基类向下转换为孙子类。以下代码在我的环境中运行良好。但是我不确定它是否适用于任何条件/环境。请告诉我你所知道的。非常感谢。附言。老实说,我不确定我询问堆栈溢出的方式是好是坏。如果您发现不好的地方,请告诉我。再次感谢。#includetemplateclassGrandBase{public:voidprint(void){constGrandChild*grand_child=static_cast(this);std::coutgrand_child_valueclassBridgeClass:publicGrandBase{};c

c++ - 多重继承、虚方法冲突和来自基类的指针

我从多重继承、虚拟方法和指向基类的指针中得到了我没想到的结果。使用d.getStr(),当d是一个derived实例时,调用base_2版本,如我所料。使用p->getStr(),当p是指向derived实例的指针(或指向base_2的指针指向一个derived实例),base_2版本被调用,如我所料。但是对于p->getStr(),当p是指向base_1的指针时,指向derived实例,调用了base_1版本,我确信会调用base_2版本(感谢using和getStr()是虚拟方法)。下面是一个简单的例子:#includestructbase_1{virtualstd::string

c++ - 我可以将基类的个别成员的状态更改为私有(private)吗?

我正在使用wxWidgets,如果您曾经使用过它,您就会知道基类中有很多公共(public)函数。我最近遇到了一种情况,我不希望直接从派生类调用方法SetText()。也就是说,派生类继承了SetText()函数,但我不希望客户端可以使用此函数。相反,我提供了两个调用SetText()的新函数,但在执行一些额外操作之前不会调用。目前,客户端(我!)可以忘记调用特殊函数而只需调用SetText()。因此,将不会执行一些额外的操作。这些操作非常微妙,很容易被忽视。那么,我能否将个别函数标记为私有(private)函数,以便客户端无法调用它们,或者只是让客户端无法直接调用它(他们将不得不使用